﻿#pragma once

#include <xy/ais/object.h>

namespace xy
{

namespace ais
{

class arrow : public object
{
  public:
    /**
     * @brief 指针构造
     *
     * @param[in] origin
     * @param[in] vector
     */
    arrow(std::shared_ptr<geom::vec3> origin, std::shared_ptr<geom::vec3> vector);

    /**
     * @brief 获得矢量
     *
     * @return std::shared_ptr<geom::vec3>
     */
    std::shared_ptr<geom::vec3> vector() const;

    /**
     * @brief 获得原点
     *
     * @return geom::vec3
     */
    std::shared_ptr<geom::vec3> origin() const;

    /**
     * @brief 碰撞检测接口
     * 
     * @param[in] msg 
     * @return true 
     * @return false 
     */
    bool collision(msg_mouse *msg) override;

    /**
     * @brief 初始化消息
     *
     * @param[in] msg
     */
    void visit(msg_init *msg) override;

    /**
     * @brief 移动消息
     *
     * @param[in] msg
     */
    void visit(msg_move *msg) override;

  protected:
    std::shared_ptr<geom::vec3> m_origin;
    std::shared_ptr<geom::vec3> m_vector;
};

} // namespace ais

} // namespace xi
